import request from "@/utils/request";

/**
 * @description 获取漏洞列表
 * @param {Object} params - 查询参数
 * @param {number} params.page_index - 页码
 * @param {number} params.page_size - 每页数量
 * @param {string} [params.title] - 漏洞名称
 * @param {string} [params.vuln_type] - 漏洞类型
 * @param {string} [params.level] - 漏洞等级
 * @param {string} [params.start_time] - 开始时间
 * @param {string} [params.end_time] - 结束时间
 * @returns {Promise} Promise 对象
 */
// 获取漏洞列表
export function getVulnerabilityList(params) {
  return request({
    url: "/vuln_db/vuln/",
    method: "get",
    params,
  });
}
// 获取任务列表
export function getTaskList(params) {
  return request({
    url: "/vuln_db/analysis_task/",
    method: "get",
    params,
  });
}

/**
 * @description 更新漏洞
 * @param {Object} data - 漏洞信息
 * @param {string} data.id - 漏洞ID
 * @param {string} data.title - 漏洞标题
 * @param {string} [data.source] - 漏洞来源
 * @param {string} [data.cve_id] - CVE编号
 * @param {string} [data.cve_id_link] - CVE链接
 * @param {string} [data.cnvd_id] - CNVD编号
 * @param {string} [data.cnvd_id_link] - CNVD链接
 * @param {string} [data.ref_link] - 参考链接
 * @param {string} [data.patch_link] - 补丁链接
 * @param {string} [data.patch_description] - 补丁描述
 * @param {string} [data.solution] - 解决方案
 * @param {string} data.public_time - 发布时间
 * @param {string} data.description - 漏洞描述
 * @param {number} data.score - 漏洞评分
 * @param {string} [data.vendor] - 厂商
 * @param {string} [data.vendor_english] - 厂商英文
 * @param {string} data.vuln_type - 漏洞类型
 * @param {Array} [data.product_list] - 产品列表
 * @param {string} data.level - 漏洞等级
 * @param {File} [data.poc_file] - POC文件
 * @param {File} [data.exp_file] - EXP文件
 * @returns {Promise} Promise 对象
 */
export function updateVulnerability(data) {
  return request({
    url: "/vuln_db/vuln_update/",
    method: "POST",
    data: data,
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });
}
export function addVulnerability(data) {
  return request({
    url: "/vuln_db/vuln/",
    method: "POST",
    data: data,
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });
}

/**
 * @description 删除漏洞
 * @param {string} id - 漏洞ID
 * @returns {Promise} Promise 对象
 */
export function deleteVulnerability(data) {
  return request({
    url: "/vuln_db/vuln/",
    method: "delete",
    data,
  });
}

/**
 * @description 导出漏洞
 * @param {string} id_list - 漏洞ID列表
 * @returns {Promise} Promise 对象
 */
export function exportVulnerability(data) {
  return request({
    url: "/vuln_db/vuln_export/",
    method: "POST",
    data,
  });
}

/**
 * @description 获取漏洞类型
 * @returns {Promise} Promise 对象
 */
export function getVulnerabilityType() {
  return request({
    url: "/vuln_db/vuln_type/",
    method: "GET",
  });
}

/**
 * 获取上传漏洞模版
 * @param {Object} params - 查询参数
 * @param {number} params.page_index - 页码
 * @param {number} params.page_size - 每页数量
 * @returns {Promise} Promise 对象
 */
export function getUploadTemplate(type) {
  return request({
    url: "/script/template_file/?type=" + type,
    method: "GET",
    headers: {
      "Content-Type": "application/octet-stream",
    },
    responseType: "blob",
  });
}

/**
 * 批量上传漏洞信息
 * @param {Object} params - 查询参数
 * @param {number} params.page_index - 页码
 * @param {number} params.page_size - 每页数量
 * @returns {Promise} Promise 对象
 */
export function UploadVulns(data) {
  return request({
    url: "/script/upload/",
    method: "POST",
    data,
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });
}

/**
 * 获取漏洞来源列表
 * @returns {Promise} Promise 对象
 */
export function getVulnSource() {
  return request({
    url: "/vuln_db/vuln_source/",
    method: "GET",
  });
}

/**
 * 获取漏洞大模型分析
 * @returns {Promise} Promise 对象
 */
export function getVulnAnalysis(id) {
  return request({
    url: "/vuln_db/vuln_analysis/?id=" + id,
    method: "GET",
    timeout: 700000
  });
}

/**
 * 获取不同source漏洞数量
 * @returns {Promise} Promise 对象
 */
export function getVulnSourceCount(params) {
  return request({
    url: "/vuln_db/source_count/",
    method: "GET",
    params
  });
}

/**
 * 获取不同type漏洞数量
 * @returns {Promise} Promise 对象
 */
export function getVulnTypeCount(params) {
  return request({
    url: "/vuln_db/type_count/",
    method: "GET",
    params
  });
}

/**
 * 获取不同level漏洞数量
 * @returns {Promise} Promise 对象
 */
export function getVulnLevelCount(params) {
  return request({
    url: "/vuln_db/level_count/",
    method: "GET",
    params
  });
}
/**
 * 获取不同产品类型漏洞数量
 * @returns {Promise} Promise 对象
 */
export function getVulnProductTypeCount(params) {
  return request({
    url: "/vuln_db/product_type_count/",
    method: "GET",
    params
  });
}

/**
 * 获取不同poc漏洞数量
 * @returns {Promise} Promise 对象
 */
export function getVulnPocCount(params) {
  return request({
    url: "/vuln_db/poc_count/",
    method: "GET",
    params
  });
}

/**
 * 创建漏洞任务
 * @returns {Promise} Promise 对象
 */
export function createVulnTask(data) {
  return request({
    url: "/vuln_db/analysis_task/",
    method: "POST",
    data,
    headers: {
     "Content-Type": "multipart/form-data",
    },
  });
}
/**
 * 创建漏洞任务
 * @returns {Promise} Promise 对象
 */
export function deleteVulnTask(data) {
  return request({
    url: "/vuln_db/analysis_task/",
    method: "DELETE",
    data,
  });
}

/**
 * 获取获取漏洞文档
 * @returns {Promise} Promise 对象
 */
export function getVulnPocList(params) {
 if(params.start_time && params.end_time) {
    return request({
      url: `/verify/task_poc/?page_index=${params.page_index}&page_size=${params.page_size}&name=${params.name}&start_time=${params.start_time}&end_time=${params.end_time}&vuln_title=${params.vuln_title}`,
      method: 'get',
    });
  } else {
    return request({
      url: `/verify/task_poc/?page_index=${params.page_index}&page_size=${params.page_size}&name=${params.name}&vuln_title=${params.vuln_title}`,
      method: 'get',
    });
  }
}

/**
 * 获取产品类型
 * @returns {Promise} Promise 对象
 */
export function getProductList() {
  return request({
    url: "/vuln_db/product_type/",
    method: "GET"
  });
}